/*
* SourceSatelliteWindow.java
*
* Copyright (C) 2009-15 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.source;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import org.rstudio.core.client.StringUtil;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.application.Desktop;
import org.rstudio.studio.client.application.events.EventBus;
import org.rstudio.studio.client.application.ui.CodeSearchLauncher;
import org.rstudio.studio.client.common.satellite.SatelliteWindow;
import org.rstudio.studio.client.projects.ProjectMRUList;
import org.rstudio.studio.client.workbench.FileMRUList;
import org.rstudio.studio.client.workbench.ui.FontSizeManager;
import org.rstudio.studio.client.workbench.views.buildtools.BuildCommands;
import org.rstudio.studio.client.workbench.views.console.events.WorkingDirChangedEvent;
import org.rstudio.studio.client.workbench.views.source.model.SourceWindowParams;
@Singleton
public class SourceSatelliteWindow extends SatelliteWindow
implements SourceSatelliteView
{
@Inject
public SourceSatelliteWindow(Provider<EventBus> pEventBus,
Provider<FontSizeManager> pFSManager,
Provider<SourceSatellitePresenter> pPresenter,
Provider<SourceWindowManager> pWindowManager,
Provider<SourceWindow> pSourceWindow,
Provider<FileMRUList> pFileMRUList,
Provider<ProjectMRUList> pProjectMRUList,
CodeSearchLauncher launcher)
{
super(pEventBus, pFSManager);
pEventBus_ = pEventBus;
pPresenter_ = pPresenter;
pWindowManager_ = pWindowManager;
pSourceWindow_ = pSourceWindow;
pFileMRUList_ = pFileMRUList;
pProjectMRUList_ = pProjectMRUList;
}
@Override
protected void onInitialize(LayoutPanel mainPanel, JavaScriptObject params)
{
// read the params and set up window ordinal / title
SourceWindowParams windowParams = params.cast();
String title = null;
if (windowParams != null)
{
pWindowManager_.get().setSourceWindowOrdinal(
windowParams.getOrdinal());
title = windowParams.getTitle();
}
if (title == null)
title = "";
else
title += " - ";
title += "RStudio Source Editor";
Window.setTitle(title);
// set up the source window
SourceWindow sourceWindow = pSourceWindow_.get();
if (windowParams != null &&
windowParams.getDocId() != null &&
windowParams.getSourcePosition() != null)
{
// if this source window is being opened to pop out a particular doc,
// read that doc's ID and current position so we can restore it
sourceWindow.setInitialDoc(windowParams.getDocId(),
windowParams.getSourcePosition());
}
SourceSatellitePresenter appPresenter = pPresenter_.get();
// initialize build commands (we want these to work from source windows)
BuildCommands.setBuildCommandState(
RStudioGinjector.INSTANCE.getCommands(),
RStudioGinjector.INSTANCE.getSession().getSessionInfo());
// initialize MRUs on Cocoa desktop (on Qt and in server mode the MRU
// menu entries aren't accessible from the source window)
if (Desktop.isDesktop() && Desktop.getFrame().isCocoa())
{
pFileMRUList_.get();
pProjectMRUList_.get();
}
// initialize working directory
if (!StringUtil.isNullOrEmpty(windowParams.getWorkingDir()))
{
pEventBus_.get().fireEvent(new WorkingDirChangedEvent(
windowParams.getWorkingDir()));
}
// make it fill the containing layout panel
Widget presWidget = appPresenter.asWidget();
mainPanel.add(presWidget);
mainPanel.setWidgetLeftRight(presWidget, 0, Unit.PX, 0, Unit.PX);
mainPanel.setWidgetTopBottom(presWidget, 0, Unit.PX, 0, Unit.PX);
}
@Override
public void reactivate(JavaScriptObject params)
{
}
@Override
public Widget getWidget()
{
return this;
}
@Override
public boolean supportsThemes()
{
return true;
}
private final Provider<EventBus> pEventBus_;
private final Provider<SourceSatellitePresenter> pPresenter_;
private final Provider<SourceWindowManager> pWindowManager_;
private final Provider<SourceWindow> pSourceWindow_;
private final Provider<FileMRUList> pFileMRUList_;
private final Provider<ProjectMRUList> pProjectMRUList_;
}